package br.jonasLab.financistoweb.view.managed;

import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

import br.jonasLab.financistoweb.control.BalancoControl;
import br.jonasLab.financistoweb.vo.BalancoMesAnoVO;
import br.jonasLab.financistoweb.vo.DetalheBalacoVO;

@ManagedBean
@SessionScoped
public class BalancoMesAnoMB extends MB<BalancoMesAnoVO> {
	
	private Boolean renderBalancoGeralPanel     = new Boolean(false);
	private Boolean renderDetalhes              = new Boolean(false);
	private Boolean renderDetalheGanhoPanel     = new Boolean(false);
	private Boolean renderDetalheRetidoPanel    = new Boolean(false);
	private Boolean renderDetalhePagCartaoPanel = new Boolean(false);
	private Boolean renderDetalheGastosPanel    = new Boolean(false);
	private Boolean renderDetalheOrcamentoPanel    = new Boolean(false);
	private Integer periodoEmMeses;
	private Double totalGanho;
	private Double totalRetido;
	private Double totalGastos;
	private Double difGanhoGasto;
	private BalancoMesAnoVO balancoMesAnoVO = new BalancoMesAnoVO();
	private List<BalancoMesAnoVO> listVOs = new ArrayList<BalancoMesAnoVO>();
	private List<DetalheBalacoVO> listDetalheBalancoVOs;
	private List<DetalheBalacoVO> listRankingCategoriaPorMes;
	
	private BalancoControl control = new BalancoControl();
	
	@Override
	protected void initializeEntity() {
	
	}
	
	public String listar(){
		try {
			List<BalancoMesAnoVO> listVOs = control.balancoMesAno();
			if(listVOs != null){
				setPeriodoEmMeses(listVOs.size());
				setTotalGanho(0.0);
				setTotalRetido(0.0);
				setTotalGastos(0.0);
				setDifGanhoGasto(0.0);
				setListVOs(listVOs);
				for (int i = 0; i < listVOs.size(); i++) {
					totalGanho+=listVOs.get(i).getGanho();
					totalRetido+=listVOs.get(i).getRetido();
					totalGastos+=listVOs.get(i).getGasto()+listVOs.get(i).getPagCartao();
				}
				setDifGanhoGasto(totalGanho+totalGastos);
			}
		} catch (Exception e) {
			e.printStackTrace();
		}
		setRenderBalancoGeralPanel(true);
		return null;
	}
	
	public void visualizarGanho(){
		try {
			setRenderDetalhes(true);
			setRenderDetalheGanhoPanel(true);
			setRenderDetalheRetidoPanel(false);
			setRenderDetalhePagCartaoPanel(false);
			setRenderDetalheGastosPanel(false);
			setRenderDetalheOrcamentoPanel(false);
			setListDetalheBalancoVOs(new ArrayList<DetalheBalacoVO>());
			setListDetalheBalancoVOs(control.listDetalheGanhos(getBalancoMesAnoVO().getMesAno()));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public void visualizarRetido(){
		setRenderDetalhes(true);
		setRenderDetalheGanhoPanel(false);
		setRenderDetalheRetidoPanel(true);
		setRenderDetalhePagCartaoPanel(false);
		setRenderDetalheGastosPanel(false);
		setRenderDetalheOrcamentoPanel(false);
		try {
			setListDetalheBalancoVOs(new ArrayList<DetalheBalacoVO>());
			setListDetalheBalancoVOs(control.listDetalheRetido(getBalancoMesAnoVO().getMesAno()));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void visualizarPagCartao(){
		setRenderDetalhes(true);
		setRenderDetalheGanhoPanel(false);
		setRenderDetalheRetidoPanel(false);
		setRenderDetalhePagCartaoPanel(true);
		setRenderDetalheGastosPanel(false);
		setRenderDetalheOrcamentoPanel(false);
		try {
			setListDetalheBalancoVOs(new ArrayList<DetalheBalacoVO>());
			setListDetalheBalancoVOs(control.listDetalhePagCartao(getBalancoMesAnoVO().getMesAno()));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void visualizarGastos(){
		setRenderDetalhes(true);
		setRenderDetalheGanhoPanel(false);
		setRenderDetalheRetidoPanel(false);
		setRenderDetalhePagCartaoPanel(false);
		setRenderDetalheGastosPanel(true);
		setRenderDetalheOrcamentoPanel(false);
		try {
			setListDetalheBalancoVOs(new ArrayList<DetalheBalacoVO>());
			setListDetalheBalancoVOs(control.listDetalheGasto(getBalancoMesAnoVO().getMesAno()));
			setListRankingCategoriaPorMes(new ArrayList<DetalheBalacoVO>());
			setListRankingCategoriaPorMes(control.listRankingCategoriaPorMes(getBalancoMesAnoVO().getMesAno()));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void visualizarOrsamento(){
		setRenderDetalhes(true);
		setRenderDetalheGanhoPanel(false);
		setRenderDetalheRetidoPanel(false);
		setRenderDetalhePagCartaoPanel(false);
		setRenderDetalheGastosPanel(false);
		setRenderDetalheOrcamentoPanel(true);
		try {
			setListDetalheBalancoVOs(new ArrayList<DetalheBalacoVO>());
			setListDetalheBalancoVOs(control.listDetalheGasto(getBalancoMesAnoVO().getMesAno()));
			setListRankingCategoriaPorMes(new ArrayList<DetalheBalacoVO>());
			setListRankingCategoriaPorMes(control.listRankingCategoriaPorMes(getBalancoMesAnoVO().getMesAno()));
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public Boolean getRenderBalancoGeralPanel() {
		return renderBalancoGeralPanel;
	}

	public void setRenderBalancoGeralPanel(Boolean renderBalancoGeralPanel) {
		this.renderBalancoGeralPanel = renderBalancoGeralPanel;
	}

	public Boolean getRenderDetalhes() {
		return renderDetalhes;
	}

	public void setRenderDetalhes(Boolean renderDetalhes) {
		this.renderDetalhes = renderDetalhes;
	}

	public Boolean getRenderDetalheGanhoPanel() {
		return renderDetalheGanhoPanel;
	}

	public void setRenderDetalheGanhoPanel(Boolean renderDetalheGanhoPanel) {
		this.renderDetalheGanhoPanel = renderDetalheGanhoPanel;
	}

	public Boolean getRenderDetalheRetidoPanel() {
		return renderDetalheRetidoPanel;
	}

	public void setRenderDetalheRetidoPanel(Boolean renderDetalheRetidoPanel) {
		this.renderDetalheRetidoPanel = renderDetalheRetidoPanel;
	}

	public Boolean getRenderDetalhePagCartaoPanel() {
		return renderDetalhePagCartaoPanel;
	}

	public void setRenderDetalhePagCartaoPanel(
			Boolean renderDetalhePagCartaoPanel) {
		this.renderDetalhePagCartaoPanel = renderDetalhePagCartaoPanel;
	}

	public Boolean getRenderDetalheGastosPanel() {
		return renderDetalheGastosPanel;
	}

	public void setRenderDetalheGastosPanel(Boolean renderDetalheGastosPanel) {
		this.renderDetalheGastosPanel = renderDetalheGastosPanel;
	}

	public Boolean getRenderDetalheOrcamentoPanel() {
		return renderDetalheOrcamentoPanel;
	}

	public void setRenderDetalheOrcamentoPanel(
			Boolean renderDetalheOrsamentoPanel) {
		this.renderDetalheOrcamentoPanel = renderDetalheOrsamentoPanel;
	}

	public Integer getPeriodoEmMeses() {
		return periodoEmMeses;
	}

	public void setPeriodoEmMeses(Integer periodoEmMeses) {
		this.periodoEmMeses = periodoEmMeses;
	}

	public Double getTotalGanho() {
		return totalGanho;
	}

	public void setTotalGanho(Double totalGanho) {
		this.totalGanho = totalGanho;
	}

	public Double getTotalRetido() {
		return totalRetido;
	}

	public void setTotalRetido(Double totalRetido) {
		this.totalRetido = totalRetido;
	}

	public Double getTotalGastos() {
		return totalGastos;
	}

	public void setTotalGastos(Double totalGastos) {
		this.totalGastos = totalGastos;
	}

	public Double getDifGanhoGasto() {
		return difGanhoGasto;
	}

	public void setDifGanhoGasto(Double difGanhoGasto) {
		this.difGanhoGasto = difGanhoGasto;
	}

	public BalancoMesAnoVO getBalancoMesAnoVO() {
		return balancoMesAnoVO;
	}

	public void setBalancoMesAnoVO(BalancoMesAnoVO balancoMesAnoVO) {
		this.balancoMesAnoVO = balancoMesAnoVO;
	}

	public List<BalancoMesAnoVO> getListVOs() {
		return listVOs;
	}

	public void setListVOs(List<BalancoMesAnoVO> listVOs) {
		this.listVOs = listVOs;
	}

	public List<DetalheBalacoVO> getListDetalheBalancoVOs() {
		return listDetalheBalancoVOs;
	}

	public void setListDetalheBalancoVOs(List<DetalheBalacoVO> listDetalheBalancoVOs) {
		this.listDetalheBalancoVOs = listDetalheBalancoVOs;
	}

	public List<DetalheBalacoVO> getListRankingCategoriaPorMes() {
		return listRankingCategoriaPorMes;
	}

	public void setListRankingCategoriaPorMes(
			List<DetalheBalacoVO> listRankingCategoriaPorMes) {
		this.listRankingCategoriaPorMes = listRankingCategoriaPorMes;
	}
}
